package gobelinmaker.client;

import com.sun.scenario.scenegraph.SGGroup;
import com.sun.scenario.scenegraph.SGShape;
import com.sun.scenario.scenegraph.SGTransform;
import gobelinmaker.data.BasicMotorHoleData;
import java.awt.Color;
import java.awt.geom.Rectangle2D;

/**
 * Felfedezett lyuk komponens alaposztálya.
 *
 * @author imruf84
 */
public class DiscoveredHoleComponent extends SGGroup {

    /**
     * Lyuk adata.
     */
    private BasicMotorHoleData holeData = null;
    /**
     * Belső lyuk objektum.
     */
    private SGShape inner;
    /**
     * Pozíció.
     */
    private SGTransform.Translate translate;
    /**
     * Csoport.
     */
    private SGGroup group;

    public DiscoveredHoleComponent() {
        BasicMotorHoleData hd = new BasicMotorHoleData();
        createComponent(hd);
    }

    /**
     * Konstruktor.
     *
     * @param hd lyuk adatai
     */
    public DiscoveredHoleComponent(BasicMotorHoleData hd) {
        createComponent(hd);
    }

    /**
     * Komponens létrehozása.
     *
     * @param hd lyuk adatai
     */
    protected final void createComponent(BasicMotorHoleData hd) {

        this.holeData = hd;

        this.group = new SGGroup();

        this.inner = createShape();
        this.group.add(this.inner);

        this.translate = SGTransform.createTranslation(0, 0, null);
        this.translate.setChild(this.group);
        this.add(this.translate);

        this.translate.setTranslation(hd.motorPosition[0], hd.motorPosition[1]);
    }

    /**
     * Forma létrehozása.
     *
     * @return forma
     */
    protected SGShape createShape() {
        double sih = HoleComponent.INNER_SIZE / 2;
        SGShape s = new SGShape();
        s.setShape(new Rectangle2D.Double(-sih, -sih, HoleComponent.INNER_SIZE, HoleComponent.INNER_SIZE));
        s.setFillPaint(Color.RED);

        return s;
    }

    /**
     * Tű pozíciójának a megadása
     *
     * @param x első koordináta
     * @param y második koordináta
     */
    public void setLocation(double x, double y) {
        this.translate.setTranslation(x, y);
    }

    /**
     * Lyuk adatainak a lekérdezése.
     *
     * @return lyuk adatai
     */
    public BasicMotorHoleData getHoleData() {
        return holeData;
    }

    @Override
    public String toString() {
        return holeData.toString();
    }
}
